#!/bin/bash

# YxYWeb 一键安装脚本
# 适用于 x86 生产服务器部署

set -e  # 遇到错误立即退出

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

# 日志函数
log_info() {
    echo -e "${BLUE}[INFO]${NC} $1"
}

log_success() {
    echo -e "${GREEN}[SUCCESS]${NC} $1"
}

log_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否为root用户
check_root() {
    if [[ $EUID -eq 0 ]]; then
        log_warning "检测到root用户运行，建议使用普通用户运行此脚本"
        read -p "是否继续？(y/N): " -n 1 -r
        echo
        if [[ ! $REPLY =~ ^[Yy]$ ]]; then
            exit 1
        fi
    fi
}

# 检查系统环境
check_system() {
    log_info "检查系统环境..."
    
    # 检查操作系统
    if [[ "$OSTYPE" != "linux-gnu"* ]]; then
        log_error "此脚本仅支持Linux系统"
        exit 1
    fi
    
    # 检查架构
    ARCH=$(uname -m)
    if [[ "$ARCH" != "x86_64" ]]; then
        log_warning "检测到非x86_64架构: $ARCH，可能不兼容"
    fi
    
    # 检查Python版本
    if command -v python3.10 &> /dev/null; then
        PYTHON_CMD="python3.10"
        PYTHON_VERSION=$(python3.10 --version | cut -d' ' -f2 | cut -d'.' -f1,2)
        log_info "检测到Python版本: $PYTHON_VERSION"
    elif command -v python3 &> /dev/null; then
        PYTHON_CMD="python3"
        PYTHON_VERSION=$(python3 --version | cut -d' ' -f2 | cut -d'.' -f1,2)
        log_info "检测到Python版本: $PYTHON_VERSION"
    else
        log_error "未找到Python3，请先安装Python 3.8+"
        exit 1
    fi
    
    # 检查pip
    if ! command -v pip3 &> /dev/null; then
        log_error "未找到pip，请先安装pip"
        exit 1
    fi
    
    log_success "系统环境检查通过"
}

# 安装系统依赖
install_system_deps() {
    log_info "安装系统依赖..."
    
    # 检测包管理器
    if command -v apt-get &> /dev/null; then
        PKG_MANAGER="apt"
        log_info "检测到apt包管理器"
        sudo apt-get update
        sudo apt-get install -y build-essential git curl wget python3-dev python3-venv python3-pip
    elif command -v yum &> /dev/null; then
        PKG_MANAGER="yum"
        log_info "检测到yum包管理器"
        sudo yum update -y
        sudo yum install -y python3.10-devel python3.10-pip gcc gcc-c++ make git curl wget
    elif command -v dnf &> /dev/null; then
        PKG_MANAGER="dnf"
        log_info "检测到dnf包管理器"
        sudo dnf update -y
        sudo dnf install -y python3.10-devel python3.10-pip gcc gcc-c++ make git curl wget
    else
        log_error "未找到支持的包管理器(apt/yum/dnf)"
        exit 1
    fi
    
    log_success "系统依赖安装完成"
}

# 配置pip使用清华源
configure_pip() {
    log_info "配置pip使用清华源..."
    
    # 创建pip配置目录
    mkdir -p ~/.pip
    
    # 配置pip源
    cat > ~/.pip/pip.conf << EOF
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
timeout = 120
retries = 3

[install]
trusted-host = pypi.tuna.tsinghua.edu.cn
EOF
    
    log_success "pip配置完成"
}

# 创建虚拟环境
create_venv() {
    log_info "创建Python虚拟环境..."
    
    # 使用项目特定的虚拟环境名称
    VENV_NAME="yxyweb_venv"
    
    # 删除已存在的虚拟环境
    if [ -d "$VENV_NAME" ]; then
        log_warning "删除已存在的虚拟环境: $VENV_NAME"
        rm -rf "$VENV_NAME"
    fi
    
    # 创建新的虚拟环境
    $PYTHON_CMD -m venv "$VENV_NAME"
    
    # 激活虚拟环境
    source "$VENV_NAME/bin/activate"
    
    # 升级pip
    pip install --upgrade pip
    
    log_success "虚拟环境创建完成: $VENV_NAME"
}

# 安装Python依赖
install_python_deps() {
    log_info "安装Python依赖包..."
    
    # 激活虚拟环境
    source yxyweb_venv/bin/activate
    
    # 安装基础依赖
    log_info "安装基础依赖..."
    pip install --upgrade pip setuptools wheel
    
    # 安装项目依赖
    log_info "安装项目依赖..."
    pip install -r requirements.txt
    
    log_success "Python依赖安装完成"
}

# 配置NLTK使用国产源
configure_nltk() {
    log_info "配置NLTK使用国产源..."
    
    # 激活虚拟环境
    source yxyweb_venv/bin/activate
    
    # 创建NLTK数据目录
    sudo mkdir -p /usr/local/nltk_data
    sudo chown -R $(whoami):$(whoami) /usr/local/nltk_data
    
    # 设置NLTK数据路径环境变量
    echo 'export NLTK_DATA="/usr/local/nltk_data"' >> ~/.bashrc
    echo 'export NLTK_DATA="/usr/local/nltk_data"' >> ~/.profile
    
    # 创建NLTK配置文件
    mkdir -p ~/.nltk
    cat > ~/.nltk/nltk.ini << EOF
[data]
path = /usr/local/nltk_data
EOF
    
    # 下载NLTK数据（使用国内镜像）
    $PYTHON_CMD -c "
import nltk
import os
os.environ['NLTK_DATA'] = '/usr/local/nltk_data'

# 设置NLTK数据下载源为清华镜像
nltk.set_proxy('https://mirrors.tuna.tsinghua.edu.cn/nltk_data/')

try:
    # 下载常用数据包
    nltk.download('punkt', quiet=True)
    nltk.download('stopwords', quiet=True)
    nltk.download('wordnet', quiet=True)
    nltk.download('averaged_perceptron_tagger', quiet=True)
    nltk.download('vader_lexicon', quiet=True)
    print('NLTK数据下载完成')
except Exception as e:
    print(f'NLTK数据下载失败: {e}')
    print('将使用在线模式')
"
    
    log_success "NLTK配置完成"
}

# 创建必要的目录
create_directories() {
    log_info "创建必要的目录..."
    
    # 创建数据目录
    mkdir -p data
    mkdir -p repositories
    mkdir -p uploads
    mkdir -p /tmp/yxyweb
    
    # 设置权限
    chmod 755 data repositories uploads
    chmod 777 /tmp/yxyweb
    
    log_success "目录创建完成"
}

# 创建环境配置文件
create_env_config() {
    log_info "创建环境配置文件..."
    
    if [ ! -f ".env" ]; then
        cat > .env << EOF
# 数据库配置
DB_USER=yxy
DB_PASSWORD=7ZZb8L!F
DB_HOST=172.16.21.77
DB_PORT=4040
DB_NAME=yxy

# AI服务配置
AI_PROVIDER=zhipu
AI_AUTH_URL=http://172.16.21.142:7861/token
AI_CHAT_URL=http://116.142.76.181:20025/v1/chat/completions
AI_YXY_KNOWLEDGE_URL=http://172.16.21.142:7861/chat/knowledge_base_chat
AI_YXY_CHAT_URL=http://172.16.21.142:7861/chat/chat
AI_KNOWLEDGE_URL=http://172.16.21.142:7861/knowledge_base/search_docs
AI_USERNAME=dxd
AI_PASSWORD=123
AI_MODEL_NAME=deepseek-llm-32B-chat
AI_TEMPERATURE=0.7
AI_MAX_TOKENS=0
AI_STREAM_ENABLED=true

# 智谱API配置
ZHIPU_API_KEY=12a39955a206475b89007dc5b0de9ed8.Gq7dHQSAwhYF8Kf9
ZHIPU_CHAT_URL=https://open.bigmodel.cn/api/paas/v4/chat/completions
ZHIPU_MODEL=glm-4-flash-250414

# 应用配置
DEBUG=false
ENVIRONMENT=production
EOF
        log_success "环境配置文件创建完成"
    else
        log_warning "环境配置文件已存在，跳过创建"
    fi
}

# 设置脚本权限
set_permissions() {
    log_info "设置脚本权限..."
    
    # 设置脚本执行权限
    chmod +x install.sh
    chmod +x start.sh
    chmod +x stop.sh
    chmod +x restart.sh
    
    log_success "权限设置完成"
}

# 主安装流程
main() {
    echo "=========================================="
    echo "    YxYWeb 一键安装脚本"
    echo "    适用于 x86 生产服务器"
    echo "=========================================="
    echo
    
    # 检查环境
    check_root
    check_system
    
    # 安装依赖
    install_system_deps
    configure_pip
    
    # 创建环境
    create_venv
    install_python_deps
    configure_nltk
    
    # 配置项目
    create_directories
    create_env_config
    set_permissions
    
    echo
    echo "=========================================="
    log_success "安装完成！"
    echo "=========================================="
    echo
    echo "下一步操作："
    echo "1. 检查并修改 .env 文件中的配置"
    echo "2. 运行 ./start.sh 启动服务"
    echo "3. 运行 ./stop.sh 停止服务"
    echo "4. 运行 ./restart.sh 重启服务"
    echo
    echo "服务将在 http://localhost:8000 启动"
    echo "健康检查: http://localhost:8000/health"
    echo
}

# 执行主函数
main "$@"
